Introduction

Docker est devenu un outil incontournable pour les développeurs et les équipes DevOps, permettant de créer, déployer et gérer des applications dans des conteneurs légers et portables. Dans cet article, nous allons explorer en profondeur Docker, ses avantages, son architecture, ses commandes de base, et bien plus encore 🤗.

D'abord, qu'est ce que la conteneurisation ?

C'est une méthode de virtualisation au niveau du système d'exploitation qui permet d'exécuter et de déployer des applications de manière isolée. Contrairement aux machines virtuelles, les conteneurs partagent le noyau du système d'exploitation de l'hôte, ce qui les rend plus légers et plus efficaces.

Docker est donc tout simplement une plateforme open-source qui permet de créer, déployer et gérer des applications dans des conteneurs. Le conteneur encapsule une application et ses dépendances dans un seul package exécutable.

D'accord, mais à quoi bon ?

  • Isolation : Les applications fonctionnent de manière isolée, ce qui améliore la sécurité et la stabilité.
  • Portabilité : Les conteneurs Docker peuvent être exécutés sur n'importe quelle machine disposant de Docker.
  • Efficacité : Les conteneurs partagent le noyau du système d'exploitation, ce qui réduit les frais généraux.
  • Scalabilité : Docker facilite le scaling horizontal des applications.


Architecture de Docker

Je citerai ces quelques composants clés :

  • Docker Engine : Le moteur Docker, qui inclut le daemon Docker (dockerd), une API REST, et une CLI (interface en ligne de commande).
  • Images Docker : Des instantanés immuables d'applications et de leur environnement d'exécution.
  • Conteneurs Docker : Des instances en cours d'exécution des images Docker.
  • Registre Docker : Lieu de stockage et de distribution des images Docker (Docker Hub en est un bon exemple).

Installation de Docker

Docker peut être installé sur divers systèmes d'exploitation, y compris Linux, macOS et Windows. Pour les instructions détaillées, consultez la documentation officielle de Docker.

Pour ma part, j'utilise Docker Desktop pour Apple Silicon, disponible ici. Il suffit de le télécharger et l'installer comme tout autre logiciel.

Commandes de Base de Docker

docker pull permet de télécharger une image depuis un registre docker.

 $ docker pull <image_a_telecharger>    

docker run crée et lance un conteneur à partir d'une image Docker.

$ docker run  <image_a_lancer>         

Options courantes :

  • -d : Exécuter en arrière-plan (détaché).
  • -p : Mapper les ports (par exemple, -p 8080:80).

docker ps permet de liste les conteneurs Docker en cours d'exécution.

Options courantes :

  • -a : Afficher tous les conteneurs (en cours d'exécution et arrêtés).


docker stop permet d'arrêter un conteneur en cours d'exécution.

$ docker stop <id_du_conteneur>

docker rm supprime un conteneur arrêté.

$ docker rm <id_du_conteneur>

docker rmi supprime une image Docker.

$ docker rmi <id_image>


Création d'une Image Docker

Dockerfile

En une seule phrase, un Dockerfile est un fichier texte contenant les instructions pour construire une image Docker.

Exemple :

# Dockerfile
# Utiliser une image de base
FROM ubuntu:latest

# Installer des paquets nécessaires
RUN apt-get update && apt-get install -y \
  python3 \
  python3-pip

# Copier les fichiers de l'application
COPY . /app

# Définir le répertoire de travail
WORKDIR /app

# Installer les dépendances Python
RUN pip3 install -r requirements.txt

# Spécifier la commande à exécuter au démarrage du conteneur
CMD ["python3", "app.py"]

docker build permet de construire une image Docker à partir d'un Dockerfile.

$ docker build -t <image> .


Gestion des Volumes et des Réseaux

Volumes Docker

Les volumes permettent de faire persister les données générées par un conteneur. Sans cela, ces données ne sont valables que quand le conteneur est lancé et tout de suite supprimées quand il est éteint.

Créer un volume

$ docker volume create <nom_du_volume>

Monter un volume dans un conteneur

$ docker run -v <nom_du_volume>:/chemin/dans/le/conteneur <image>


Réseaux Docker

Docker permet de créer des réseaux virtuels pour que les conteneurs communiquent entre eux.

Créer un réseau

$ docker network create <nom_du_réseau>

Connecter un conteneur à un réseau

$ docker run --network <nom_du_réseau> <nom_de_l'image>


Quelques exemples d'Utilisation de Docker

Cas Pratique 1 : Développement Local


  • Étape 1 : Création d'une Application Simple

Nous allons créer une application Python simple.

Commençons par créer un répertoire pour le projet :

$ mkdir monAppliPython
$ cd monAppliPython

Créez un fichier app.py avec le contenu suivant :

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, Docker!'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=80)

Créez un fichier dependances.txt pour spécifier les dépendances de l'application :

flask


  • Étape 2 : Création d'un Dockerfile

Un Dockerfile est un fichier texte contenant les instructions pour construire une image Docker. Créez un fichier Dockerfile avec le contenu suivant :

# Utiliser une image de base officielle de Python
FROM python

# Définir le répertoire de travail dans le conteneur
WORKDIR /app

# Copier le fichier dependances.txt et installer les dépendances
COPY dependances.txt .
RUN pip install -r dependances.txt

# Copier le reste des fichiers de l'application
COPY . .

# Exposer le port sur lequel l'application écoute
EXPOSE 80

# Définir la commande par défaut pour exécuter l'application
CMD ["python", "app.py"]


  • Étape 3 : Construire et Exécuter l'Image Docker

Construisez l'image Docker avec la commande suivante :

$ docker build -t monAppliPython 

Exécutez le conteneur Docker :

$ docker run -d -p 4000:80 monAppliPython

Il nous suffit donc maintenant d'accéder à notre application via http://localhost:4000.


Cas Pratique 2 : Gestion des Données avec Docker Volumes

Comme expliqué plus haut, les volumes permettent de faire persister les données générées par un conteneur. Dans ce deuxième exemple, nous allons utiliser un volume Docker pour stocker les données d'une base de données MySQL, intéressant n'est-ce pas 🤔 ?


  • Étape 1 : Créer un Volume Docker

Créez un volume Docker nommé mysqldata :

$ docker volume create mysqldata


  • Étape 2 : Exécuter un Conteneur MySQL avec un Volume

Exécutez un conteneur MySQL et montez le volume mysqldata :

$ docker run -d \
    --name=mysql \
    -e MYSQL_ROOT_PASSWORD=mot_de_passe \
    -v mysqldata:/var/lib/mysql \
    mysql:latest

Les données de MySQL resteront dans le volume mysqldata, même si le conteneur est arrêté ou supprimé.


Conclusion

Docker révolutionné la manière dont les applications sont développées, déployées et gérées. En suivant ce guide, vous devriez maintenant avoir une bonne compréhension des concepts fondamentaux de Docker, des commandes de base, de la création d'images et de la gestion des volumes et des réseaux. En appliquant ces connaissances, vous pouvez améliorer l'efficacité, la portabilité et la sécurité de vos applications.

Explorez davantage les fonctionnalités avancées de Docker et expérimentez avec des projets réels pour approfondir votre compréhension et vos compétences. Restez connecté pour plus de mises à jour et de guides pratiques sur la conteneurisation et d'autres technologies passionnantes !